/*
 * mainPlugin.h
 *
 *  Created on: 2017年5月30日
 *      Author: orange
 */

#ifndef MAINPLUGIN_H_
#define MAINPLUGIN_H_

#include <semaphore.h>
#include <map>
#include <string>

#include "McServer.h"
#include "public/concurrentqueue.h"
#include "public/event/TaskJuzEvent.h"
#include "public/Plugin.h"
#include "public/rwLock.h"

class ClientQuitJuzEvent;
class SocketInfoJuzEvent;


typedef std::map<string,McServer*>::iterator mMcServerIterator;

class mainPlugin: public Plugin {
private:
	mainPlugin();
public:

	virtual ~mainPlugin();

    void eventListen(JuzEvent *event); //监听的事件 回调!
    void bindFinsh();

    void OnDisable();//注销
    void OnEnable();


    //处理网络信息
    void socketPro(SocketInfoJuzEvent *socketInfo);

    void androidOnLogin(SocketInfoJuzEvent *socketInfo);//android 客户端登录
    void mcOnLogin(SocketInfoJuzEvent *socketInfo);//MC服务器登录
    void clientQuit(ClientQuitJuzEvent *ev);//客户端退出
    void backAndroidUser(SocketInfoJuzEvent *socketInfo);
    void androidChat(SocketInfoJuzEvent *socketInfo);//安卓聊天信息
    void mcServerChat(SocketInfoJuzEvent *socketInfo);//ｍｃ聊天信息
    void mcSyncPeopleNum(SocketInfoJuzEvent *socketInfo);//ｍｃ服务器同步人数




    McServer* getMcServer(int nfd);

    static void *WndPro(void* arr);
    static mainPlugin* getInstance();
public:
    static mainPlugin *mMainPlguin;

    moodycamel::ConcurrentQueue<TaskJuzEvent*>  mTaskList;
    sem_t *task_sem; //信号量

    rwLock mMcServerLock;
    map<string,McServer*> mMcServer; //所有的MC服务器
public:
    void insertMcServer(string,McServer*);
};

#endif /* MAINPLUGIN_H_ */
